iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
Modern Web

mitmproxy 在網路爬蟲上的各種應用系列 第 17

Day 17 M3U8 協定與利用多線呈實現平行爬取,謎片下載器實作

  • 分享至 

  • xImage
  •  

M3U8

HLS 是由蘋果提出的串流媒體網路傳輸協定。

在一個 HLS 連線開始的時候,客戶端會先去請求一個 M3U8 格式的文件,裡面紀錄著播放列表檔案。

與一般 MP4 不同的地方

如果我們在網路上想要下載一個影片,且它是 .mp4 格式,那麼我們可以用 wget 下載它。

如果撈封包的時候未見常見的影片格式,取而代之的是一長串的 .ts,或者有 .m3u8 的封包,我們就可以確定它是 HLS。

這時候可以使用 ffmpeg 來下載這個檔案。

$ ffmpeg -i <m3u8_url> -c copy video.mp4

謎片下載器一

最早我設計了 Avgle 網站的下載器。

當時遇到了許多困難,主要是因為撈封包的過程不易取得 .m3u8 的檔案。

後來發現 youtube-dl 也能下載該網站的影片,所以最後就把自己的下載器專案放棄了。

謎片下載器二

我後來以一樣的概念,設計了 Jable 網站的下載器。

由於 .ts 檔案通常只會有 5 ~ 10 秒的畫面,所以一部日本愛情動作片通常會有 500 ~ 1500 左右個 .ts 檔案。

所以我想到,可以用利用多線呈去發送非同步請求,來加速多個 .ts 下載的速度。

限制你的流量

在 download 的函式可以看見我對多線呈下載的實做。

https://github.com/Yooootsuba/jabledl/blob/master/jabledl/downloader.py#L46

我設定了一個線呈最大值,如果現有的線呈已經超過這個數量,就不可以繼續新增。

流量太大勢必會造成對方伺服器的負擔,對自己的下載也沒有好處。

參考文章


上一篇
Day 16 利用中間人攻擊達成真正的作弊行為
下一篇
Day 18 你知道 Twitter 影片也是 M3U8 協定嗎 ? Twitter 影片下載器實作
系列文
mitmproxy 在網路爬蟲上的各種應用18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言